/*
 * Quaternion.h
 *
 *  Created on: 2012/03/01
 *      Author: takedanaoki
 */

#ifndef INCLUDED_NTENGINE_MATH_QUATERNION_H
#define INCLUDED_NTENGINE_MATH_QUATERNION_H

// 中身は一緒
#include "NTEngine/Math/Vector4.h"

namespace NTEngine {
namespace Math {
class Vector3;

/// Vector4にクォータニオン的な機能をのせる
class Quaternion : public Vector4 {
public:
	/**
	 * @brief クォータニオンa,bの乗算を計算し、設定します
	 */
	void setMul( const Quaternion& a, const Quaternion& b );

	/**
	 * @brief 任軸の回転でセットする
	 * 例えば、x軸で回転したいならVector3( 1, 0, 0 )を指定してやる
	 *
	 * @param axis 軸ベクトル
	 * @param 回転角
	 * @param asizを正規化するかどうか(上の例なら正規化しなくていい)
	 */
	void setAxisAngle( const Vector3& axis, float angle, bool norm = false );

	/**
	 * @brief 各回転で設定する
	 * xyzはそれぞれの軸の回転
	 */
	void setRotationMatrix( const Vector3& x, const Vector3& y, const Vector3& z );

	/**
	 * 補完値をセットする
	 */
	void setSlerp( const Quaternion& a, const Quaternion& b, float t );
};

} // namespace Math
} // namespace NTEngine

#endif // INCLUDED_NTENGINE_MATH_QUATERNION_H
